Шаг 47 - Знакомимся с LODSB.

Загрузить проект

Это специальная команда которая загружает 1 байт в регистр AL по адресу DS:SI и изменяет потом регистр SI в зависимости от флага направления. Итак, смотрим сразу код

MODEL SMALL
STACK 256
DATASEG
	str1 DB 'firststeps $'
CODESEG
Start:
	
	mov ax,@data 		; установка в ds адpеса
	mov ds,ax 		; сегмента данных
	mov cl,10		; настройка счетчика
	mov si,OFFSET str1 	; адрес строки
	cld			; направление
WriteLoop:	
	lodsb			; Загрузить символ
	mov dl,al		; для вывода
        Call WriteChar
loop WriteLoop

Exit:
	CALL ExitProgramm 

INCLUDE  function.asm 

End Start

У нас есть строка в сегменте данных. Эта строка адресуется по отношению к регистру DS. Это регистр данных. Вы все про это знаете. Командой

mov si,OFFSET str1

Мы указываем SI на смешение относительно сегмента данных. Но он же у нас DS, вот и получается правильная адресация ds:si проверим в отладчике.

47_1.gif (5251 b)

Смотрим дальше после команды lodsb измениться AL и SI. В AL будет загружено значение а SI увеличиться на 1.

47_2.gif (3166 b)

Дальше все просто, я вывожу символ воспользовавшись функций из шага Шаг 36 - Функция 02h Вывод символа и организовав цикл через LOOP. Все повториться, SI будет увеличен и в AL новый символ.

Hosted by uCoz